home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_1 / mand.plo < prev    next >
Text File  |  1995-03-23  |  4KB  |  186 lines

  1. Article 1786 of comp.sys.handhelds:
  2. Path: en.ecn.purdue.edu!pur-ee!mentor.cc.purdue.edu!noose.ecn.purdue.edu!samsung!cs.utexas.edu!ut-emx!walt.cc.utexas.edu!jkuhn
  3. From: jkuhn@walt.cc.utexas.edu (Jeff Kuhn)
  4. Newsgroups: comp.sys.handhelds
  5. Subject: Mandelbrot Sets (Fractals) on your HP48SX
  6. Message-ID: <27947@ut-emx.UUCP>
  7. Date: 10 Apr 90 22:36:22 GMT
  8. Sender: news@ut-emx.UUCP
  9. Reply-To: jkuhn@walt.cc.utexas.edu (Jeff Kuhn)
  10. Organization: The University of Texas at Austin, Austin, Texas
  11. Lines: 171
  12.  
  13.  
  14. I bought an HP48SX about 2 weeks ago and have had a hard time putting it down.
  15. Here is my first offering to the net:  a Mandelbrot set plotter.
  16.  
  17. -------------------------------------------------------------------------------
  18.  
  19.                                     MAND
  20.                                     ----
  21.  
  22. OVERVIEW
  23. --------
  24.  
  25.     MAND uses the truth plotting capabilities of the HP48SX to generate
  26.     a plot of the Mandelbrot set.  These plots take about five or six hours
  27.     to generate, but the results are interresting.  Be patient.
  28.  
  29.  
  30. USAGE
  31. -----
  32.  
  33.     Place this program in its own directory.  Press {MAND} to get a list
  34.     of options.
  35.  
  36.     {SAVE}    Prompts for a name to save the current plot and plotting
  37.         parameters.
  38.  
  39.     {LOAD}    Prompts for a name to load a previous plot.
  40.  
  41.     {EDIT}    Brings up the plotting sub-menu.  Press [Orange-Shift] [REVIEW]
  42.         to display the current plotting parameters. Press [Orange-
  43.         Shift] [GRAPH] to zoom in.
  44.  
  45.     {NEW}    Resets the plotting parameters to display the entire set
  46.  
  47.     {ITTER}    Prompts for the number of itterations to use in the calculation.
  48.  
  49.     {QUIT}    Return to the variable menu.
  50.  
  51.  
  52. -------------------------------- cut here ------------------------------------
  53. %%HP: T(3)A(R)F(.);
  54. DIR
  55.  
  56. MAND
  57. @ Set up the custom menu for the mandelbrot set program
  58. @ Check: # 54125d  Bytes: 293
  59. \<< 
  60.     { { "SAVE" {SAVE } } 
  61.       { "LOAD" {LOAD } } 
  62.       { "EDIT" { \<< 33 MENU PICT RCL \->LCD 3 FREEZE \>> } }
  63.       { "NEW" { \<< DEFAULTppar 'PPAR' STO 100 'nITTR' STO 33 MENU \>> } } 
  64.       { "ITTER" { ITTER } }
  65.       { "QUIT" { \<< 0 MENU \>> } }
  66.     } TMENU
  67. \>>
  68.  
  69. SAVE
  70. @ Saves a graphical image allong with it's plotting parameters
  71. @ Check: # 58326d  Bytes: 77
  72. \<<
  73.     "Enter name to save as" "" INPUT
  74.     OBJ\-> PICT RCL
  75.     PPAR
  76.     2 \->LIST
  77.     SWAP STO
  78. \>>
  79.  
  80. LOAD
  81. @ Loads a graphical image into PICT and sets the current plotting parameters
  82. @ Check: # 19949d  Bytes: 102.5
  83. \<<
  84.     "Enter Picture to load" "" INPUT OBJ\->
  85.     OBJ\-> DROP
  86.     'PPAR' STO
  87.     DUP PICT STO \->LCD
  88.     3 FREEZE
  89.     33 MENU
  90. \>>
  91.  
  92. ITTER
  93. @ prompts for number of itterations
  94. @ Check: # 13905d  Bytes: 77.5
  95. \<<
  96.     "Enter number of
  97. itterations" "" INPUT OBJ\->
  98.     'nITTR' STO
  99. \>>
  100.  
  101. Q MANDGEN
  102.  
  103. MANDGEN
  104. @ Generates a TRUE (1) or FALSE (0) for a single pixel based on the number
  105. @ of itterations it took in the Z=Z^2+C calculation, and the dither pattern.
  106. @ Check: # 19488d  Bytes: 132
  107. \<< 
  108.     X Y R\->C 
  109.     nITTR ITR
  110.     nITTR /
  111.     IF DUP 1 == THEN
  112.       DROP 1
  113.     ELSE
  114.       16 * 4 MOD IP X Y R\->C DITH?
  115.     END
  116. \>>
  117.  
  118. DEFAULTppar
  119. @ Check # 54257d  Bytes: 90
  120. {
  121.     (-1.5,-1) (1.5,1)
  122.     X 0 (100,100)
  123.     TRUTH Y
  124. }
  125.  
  126. PPAR
  127. @ Check # 4776d  Bytes: 83
  128. {
  129.     (-1.5,-1) (1.5,1)
  130.     X 0 (100,100)
  131.     TRUTH Y
  132. }
  133.  
  134. @ The current number of itterations
  135. nITTR 50
  136.  
  137. DITH?
  138. @ takes a color (from 0 to 4) and a point (in complex coords) from the stack
  139. @ and returns a 1 or 0 if that pixel should be set.
  140. @ Check: # 55653d  Bytes: 108
  141. \<<
  142.     C\->PX OBJ\-> DROP
  143.     B\->R SWAP B\->R
  144.     \-> c x y
  145.     \<<
  146.         PAT c 1 + GET
  147.         y 2 MOD 1 + GET
  148.         x 2 MOD 1 + GET
  149.     \>>
  150. \>>
  151.  
  152. PAT
  153. @ 4x4 dither patterns
  154. @ 00 10 10 11 11
  155. @ 00 00 01 01 11
  156. @ Check: # 26668d  Bytes: 137.5
  157. {
  158.     { { 0 0 } { 0 0 } }
  159.     { { 1 0 } { 0 0 } }
  160.     { { 1 0 } { 0 1 } }
  161.     { { 1 1 } { 0 1 } }
  162.     { { 1 1 } { 1 1 } }
  163. }
  164.  
  165. ITR
  166. @ takes a complex point and the number of itterations and performs the
  167. @ Z = Z^2 + C calculation
  168. @ Check: # 15058d  Bytes 149.5
  169. \<<
  170.     0 \-> c itter i
  171.     \<<
  172.         c PIXON c PIXOFF
  173.         (0,0)
  174.         DO
  175.           DUP * c +
  176.           'i' INCR
  177.         UNTIL itter > OVER C\->R * ABS 4 > OR END
  178.         DROP
  179.         i 1 -
  180.     \>>
  181. \>>
  182.  
  183. END
  184.  
  185.  
  186.